﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ImapactTenis;
using ImpactTenis.AcessoADados.DTOs;
using ImpactTenis.RegrasDeNegocios.Produtos;
using ImapactTenis.Produtos;
using System.Reflection;


namespace ImpactTenis.RegrasDeNegocios.Auxiliares
{
    public class Conversor
    {
        public Usuario Converter(UsuarioDTO usuarioDTO)
        {
            return new Usuario()
            {
                Id = usuarioDTO.Id,
                Funcional = usuarioDTO.Funcional,
                Senha = usuarioDTO.Senha,
                Nome = usuarioDTO.Nome,
                TipoUsuario = usuarioDTO.TipoUsuario
            };
        }

        public Cores Converter(CoresDTO coresDTO)
        {
            return new Cores()
            {
                Id = coresDTO.Id,
                Descricao = coresDTO.Descricao
            };
        }

        public Tamanho Converter(TamanhoDTO tamanhoDTO)
        {
            return new Tamanho()
            {
                Id = tamanhoDTO.Id,
                Descricao = tamanhoDTO.Descricao
            };
        }

        public Marca Converter(MarcaDTO marcaDTO)
        {
            return new Marca() 
            { 
                Id = marcaDTO.Id,
                Nome = marcaDTO.Nome
            };
        }

        public Fornecedor Converter(FornecedorDTO fornercedorDTO) 
        {
            return new Fornecedor()
            {
                Id = fornercedorDTO.Id,
                Endereco = fornercedorDTO.Endereco,
                Nome = fornercedorDTO.Nome,
                Telefone = fornercedorDTO.Telefone
            };
        }
         
        public Produto Converter(ProdutoDTO produtoDTO)
        {
            return new Produto()
            {
                Id = produtoDTO.Id,
                Modelo = produtoDTO.Modelo,
                Cor = Converter(produtoDTO.Cor),
                Tamanho = Converter(produtoDTO.Tamanho),
                Marca = Converter(produtoDTO.Marca),
                Preco = produtoDTO.Preco,
                Quantidade = produtoDTO.Quantidade,
                statusEstoque = produtoDTO.statusEstoque,
                Estoque = produtoDTO.Estoque

            };

        }

        public Vendas Converter(VendasDTO vendaDTO)
        {
            return new Vendas()
            {
                Id = vendaDTO.Id,
                DataVenda = vendaDTO.DataVenda,
                IdFormaPag = vendaDTO.IdFormaPag,
                IdProdutoVendido = vendaDTO.IdProdutoVendido,
                Troco = vendaDTO.Troco,
                ValorProduto = vendaDTO.ValorProduto,
                ValorRecebido = vendaDTO.ValorRecebido

            };
        }

        public static object PegaPropriedade(object item, string property)
        {
            if (item == null)
                return null;

            int dotIdx = property.IndexOf('.');

            if (dotIdx > 0)
            {
                object obj = PegaPropriedade(item, property.Substring(0, dotIdx));

                return PegaPropriedade(obj, property.Substring(dotIdx + 1));
            }

            PropertyInfo propInfo = null;
            Type objectType = item.GetType();

            while (propInfo == null && objectType != null)
            {
                propInfo = objectType.GetProperty(property,
                          BindingFlags.Public
                        | BindingFlags.Instance
                        | BindingFlags.DeclaredOnly);

                objectType = objectType.BaseType;
            }

            if (propInfo != null)
                return propInfo.GetValue(item, null);

            FieldInfo fieldInfo = item.GetType().GetField(property,
                          BindingFlags.Public | BindingFlags.Instance);

            if (fieldInfo != null)
                return fieldInfo.GetValue(item);

            return null;
        }

    }
}
